package top.hymsk.ecommerce.service;

import org.springframework.web.multipart.MultipartFile;
import top.hymsk.ecommerce.pojo.response.GeneralResponse;
import top.hymsk.ecommerce.pojo.status.ProductStatusCode;

/**
 * @author 花于陌上开
 */
public interface ProductService {
    /*买家模块*/

    /**
     * 获取商品详细信息
     *
     * @param productId 商品id
     * @return BaseProductDTO
     */
    GeneralResponse getProductByBuyer(Integer productId);


    /**
     * 获取默认商品推荐列表
     *
     * @param page 分页参数
     * @return CommentDTO列表
     */
    GeneralResponse searchProduct(Integer page);

    /**
     * 查询商品
     *
     * @param word 查询词
     * @param page 分页参数(索引从0开始)
     * @return ProductDTO列表
     */
    GeneralResponse searchProductByWord(String word, Integer page);

    /**
     * 查询商品评论信息
     *
     * @param productId 商品id
     * @param page      分页参数(索引从0开始)
     * @return CommentDTO列表
     */
    GeneralResponse getRemarkList(Integer productId, Integer page);

    /**
     * 获取用户购物车列表
     *
     * @param userId 用户id
     * @param page   分页参数(索引从0开始)
     * @return CartDTO列表
     */
    GeneralResponse getCartList(Integer userId, Integer page);

    /**
     * 添加商品到购物车
     *
     * @param userId    用户id
     * @param productId 商品id
     * @param num       商品数量
     * @return 是否添加成功
     */
    GeneralResponse addProductToCart(Integer userId, Integer productId, Integer num);

    /**
     * 修改购物车商品数量
     *
     * @param userId    用户id
     * @param productId 商品id
     * @param num       商品数量
     * @return 是否添加成功
     */
    GeneralResponse updateProductToCart(Integer userId, Integer productId, Integer num);

    /**
     * 删除购物车商品
     *
     * @param userId    用户id
     * @param productId 商品id
     * @return 是否添加成功
     */
    GeneralResponse removeProductFromCart(Integer userId, Integer productId);

    /*卖家模块*/

    /**
     * 获取商品详细信息
     *
     * @param productId 商品id
     * @return 响应信息
     */
    GeneralResponse getProductBySeller(Integer productId);

    /**
     * 获取商品列表
     *
     * @param storeId 店铺id
     * @return 响应信息
     */
    GeneralResponse getProductManageList(Integer storeId, Integer productId);

    /**
     * 上传商品
     *
     * @param storeId 店铺id
     * @param title   商品标题
     * @param price   商品价格
     * @param picture 图片
     * @return 响应信息
     */
    GeneralResponse upload(Integer storeId, String title, Double price, MultipartFile picture);

    /**
     * 停售商品
     *
     * @param storeId   店铺id
     * @param productId 商品id
     * @return 响应信息
     */
    GeneralResponse updateStatus(Integer storeId, Integer productId, ProductStatusCode statusCode);

    /**
     * 修改商品信息
     *
     * @param storeId   店铺id
     * @param productId 商品id
     * @param title     商品标题
     * @param price     商品价格
     * @param picture   图片
     * @return 响应信息
     */
    GeneralResponse update(Integer storeId, Integer productId, String title, Double price, MultipartFile picture);

}
